﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using vensoft.Entities;
using vensoft.BussinesLogic;

namespace vensoft.Win32
{
    public partial class frmAlmacenPorTransferencia : Form
    {
        IAlmacenBL almacenBL;
        IHistoricoBL historicoBL;
        IDetalleAlmacenBL detalleBL;

        public frmAlmacenPorTransferencia()
        {
            InitializeComponent();
            almacenBL = new AlmacenBL();
        }

        public void Llamar()
        {
            almacenBindingSource.DataSource = CurrentAlmacen;            
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();            
        }

        public Int32 id_Alm;
        public String ubic;

        private void frmAlmacenPorTransferencia_Load(object sender, EventArgs e)
        {            
            id_Alm = CurrentAlmacen.ID_Almacen;
            ubic = CurrentAlmacen.Ubicacion;
            iD_AlmacenTextBox1.Text = null;
            ubicacionTextBox1.Text = null;           

        }

        public Almacen CurrentAlmacen
        {
            get { return almacenBindingSource.Current as Almacen; }
            set
            {
                almacenBindingSource.DataSource = value;
            }
        }

        public List<Usuario> UsuarioActual { get; set; }

        private void btnBuscarOrigen_Click(object sender, EventArgs e)
        {
            frmIngresoProdAlmacen alm = new frmIngresoProdAlmacen();
            alm.estadoBotones = 0;
            alm.cod_alm = Convert.ToInt32(iD_AlmacenTextBox.Text);            
            alm.ShowDialog();

            if (alm.Current != null)
            {
                CurrentAlmacen = alm.Current;
                almacenBindingSource.ResetBindings(true);                
            }

            iD_AlmacenTextBox.Text = id_Alm.ToString();
            ubicacionTextBox.Text = ubic.ToString();        

        }

        public Producto CurrentProducto
        {
            get { return productoBindingSource.Current as Producto; }
            set
            {
                productoBindingSource.DataSource = value;
            }
        }

        private void btnBuscarProducto_Click(object sender, EventArgs e)
        {
            if (iD_AlmacenTextBox1.Text == "" && ubicacionTextBox1.Text == "")
            {
                MessageBox.Show("Debe primero elegir un almacén de origen!");
            }
            else
            {
                frmGestionarProducto prod = new frmGestionarProducto();
                prod.id_almacen = Convert.ToInt32(iD_AlmacenTextBox1.Text);
                prod.estadoBotones = 2;
                prod.ShowDialog();
                if (prod.Current != null)
                {
                    CurrentProducto = prod.Current;
                    productoBindingSource.ResetBindings(true);
                    stock_BTextBox.Text = prod.Stock_B.ToString();
                }
            }
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            if (nudCantidad.Value <= Convert.ToInt32(stock_BTextBox.Text))
            {
                #region Logica de Registro
                Int32 alm_orig, prod, cantidad;
                Historico historico = new Historico();
                historico.ID_AlmOrigen = Convert.ToInt32(iD_AlmacenTextBox1.Text);
                historico.Ubic_Origen = ubicacionTextBox1.Text;
                historico.ID_AlmDestino = Convert.ToInt32(iD_AlmacenTextBox.Text);
                historico.Ubic_Destino = ubicacionTextBox.Text;
                historico.Motivo = txtMotivo.Text;
                historico.ID_Prod = Convert.ToInt32(id_ProductoTextBox.Text);
                historico.Cod_Prod = cod_ProductoTextBox.Text;
                historico.Cantidad = Convert.ToInt32(nudCantidad.Value);
                historico.Nombre_Usuario = UsuarioActual.ElementAt(0).Nomb_Usuario;
                historicoBL = new HistoricoBL();
                historicoBL.RegistrarHistorico(historico);

                DetalleAlmacen detalle = new DetalleAlmacen();
                detalle.Cod_Alm = Convert.ToInt32(iD_AlmacenTextBox.Text);
                detalle.Stock_B = Convert.ToInt32(nudCantidad.Value);
                detalle.Ubic_Alm = ubicacionTextBox.Text;

                detalleBL = new DetalleAlmacenBL();
                detalleBL.RegistrarIngresoStock(detalle, CurrentProducto);

                alm_orig = Convert.ToInt32(iD_AlmacenTextBox1.Text);
                prod = Convert.ToInt32(id_ProductoTextBox.Text);
                cantidad = Convert.ToInt32(nudCantidad.Value);
                detalleBL.ReducirStock(prod, alm_orig, cantidad);
                #endregion
                MessageBox.Show("Transferencia Registrada");
                Close();
            }
            else
            {
                MessageBox.Show("No existe cantidad suficiente para la transferencia");
            }
        }

        #region Validaciones

        private void nudCantidad_Validating(object sender, CancelEventArgs e)
        {
            ErrorProvider(nudCantidad);
        }

        private void ErrorProvider(NumericUpDown N)
        {
            if (N.Value > Convert.ToInt32(stock_BTextBox.Text))
            {
                btnOK.Enabled = false;
                erpValidacion.SetError(N, "No tiene stock suficiente.");
            }
            else
            {
                btnOK.Enabled = true;
                erpValidacion.SetError(N, "");
            }
        }

        private void txtMotivo_Validating(object sender, CancelEventArgs e)
        {
            ErrorProvider_txt(txtMotivo);
        }

        private void ErrorProvider_txt(TextBox T)
        {
            if (T.Text.Trim().Length == 0)
            {
                erpValidacion.SetError(T, "Debe Colocar un Motivo");
                btnOK.Enabled = false;
            }

            else
            {
                erpValidacion.SetError(T, "");
                btnOK.Enabled = true;
            }
        }

        #endregion
    }
}
